﻿using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.EntityFrameworkCore;
using WpfApp1.Entities;

namespace WpfApp1;
using CommunityToolkit.Mvvm.ComponentModel;
using Context;


public partial class DataGridWindowViewModel:ObservableObject
{
    //直接在视图模型中创建 DbContext 的实例并不是最佳方法。这样做会导致每个视图模型拥有自己的 DbContext 实例，还可能引发并发问题和阻塞UI线程的问题。

    [ObservableProperty] 
    private ObservableCollection<table1>? _table1Items;

    [ObservableProperty] 
    private ObservableCollection<table1>? _table1Items2;

    
    [RelayCommand]
    public async Task LoadData()
    {
        // DbContext 的实例化不会立即创建与数据库的连接。连接是在第一次需要访问数据库时建立的。使用using是为了自动释放连接
        using (MyDbContext context = new MyDbContext())
        {
            try
            {
                // 使用异步方法防止阻塞 UI 线程
                var items = await context.table1s.ToListAsync();
                //直接替换了整个Table1Items，而不是修改它们的内容。会导致绑定到这些属性的控件无法检测到变化。
                Table1Items = new ObservableCollection<table1>(items);

                // 构建查询并使用异步方法执行查询
                var queryable = context.table1s
                    .Where(table1 => table1.model == "3YB" && table1.part_name.Contains("SLIDE"))
                    .Take(6)
                    .OrderBy(table1 => table1.part_name);
                Table1Items2 = new ObservableCollection<table1>(await queryable.ToListAsync());
            }
            catch (Exception ex)
            {
                // 处理异常，例如记录日志或显示错误信息给用户
                HandleError(ex);
            }
        }
    }

    private void HandleError(Exception ex)
    {
        System.Diagnostics.Debug.WriteLine($"An error occurred: {ex.Message}");
    }
    
}